package com.huaxin.dss2.data.NewSmallStation;


import com.huaxin.dss2.data.bean.BoxState;
import com.huaxin.dss2.util.Constant;
import com.huaxin.dss2.util.ScheduledValue;
import com.huaxin.dss2.util.SignalRUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * 盒子SignalR监听
 */
@Component
@Slf4j
public class NewSignalR {

    /**
     * update:2018/6/7
     *
     * @author luqing
     * box厂家接口初始化
     * 采集程序适配
     * 2018/6/18 适配首创、嘉靖
     * 2018/10/24 修改重连一系列操作
     */
    public static void init() {

        if ("jiajing".equals(Constant.getProperties().getCompanyName())) {
            //嘉靖处理特殊指标
            SignalRUtils.changeIsWarnMap();
        }

        //创建连接
        SignalRUtils.updateServer();
        //开启盒子监听
        SignalRUtils.startFBoxSignalR();
        //开点结束
        ScheduledValue.changeIFinishStart();
        //使用线程池处理盒子状态操作
        //Constant.GLOBAL_THREAD.execute(NewSignalR::run);
        log.info("fboxSignalR启动结束");
    }


    /**
     * 线程池开点方法
     */
    public void run() {
        //noinspection InfiniteLoopStatement
        BoxState boxState = new BoxState("初始", 0);
        try {
            //处理开点队列
            while (ScheduledValue.F_BOX_STATE_QUEUE.size() > 0) {
                boxState = ScheduledValue.F_BOX_STATE_QUEUE.poll();
                SignalRUtils.boxStateChangedDispose(boxState.getState(), boxState.getBoxUid());
            }
            //当所有掉线处理完成后,等待1s再操作队列
            //TimeUnit.SECONDS.sleep(1);
        } catch (IOException e) {
            log.error("队列开点{} 线程处理数据出现异常", boxState.getBoxUid(), e);
//        } catch (InterruptedException e) {
//            log.error("队列开点{} 线程休眠异常", boxState.getBoxUid(), e);
        } catch (Exception e) {
            log.error("队列开点{} 线程未知异常", boxState.getBoxUid(), e);
        }
    }
}
